标签: 语言特性
集合管道
集合管道是一种编程模式,您可以在其中将某些计算组织为一系列操作,这些操作通过将集合作为一项操作的输出并将其馈送到下一项操作来组合。(常见操作是过滤、映射和 reduce。)这种模式在函数式编程中很常见,在具有 lambda 的面向对象语言中也很常见。本文通过几个如何形成管道的示例来描述该模式,既向不熟悉该模式的人介绍该模式,也帮助人们理解核心概念,以便他们可以更轻松地将想法从一种语言迁移到另一种语言。
访问修饰符
面向对象的语言将程序划分为称为类的模块。每个类都包含特性,这些特性由数据(字段)和方法组成。(并非所有语言都使用这些术语,但它们适用于此。)语言对其他类可以访问类的哪些特性有各种规则,这些规则通常基于适用于类的访问修饰符。
注解
程序元素(通常是类、方法或字段)上的注解是添加到该程序元素的一段元数据,可用于使用额外的代码来修饰该元素。
调用父类
调用父类是一种轻微的气味(或者如果您愿意,也可以说是反模式),它在面向对象框架中时有出现。它的症状很容易发现。您正在从超类继承,以便插入某个框架。文档说“要执行您自己的操作,只需继承 process 方法。但是,重要的是要记住从调用超类开始您的方法”。一个例子可能是这样的。
类实例变量
当您学习对象时,您通常会了解到它们可以捕获两种数据:实例和类。实例变量是最常见的情况,数据随对象的每个实例而异。类变量(通常称为静态变量)在类的所有实例之间共享。每个实例都指向相同的值,并且所有实例都可以看到任何更改。类变量比实例变量少见得多,尤其是可变类变量。
动态类型
我一直不愿意对编程语言中静态类型和动态类型之间的争论发表任何意见。这是一个容易引起情绪的话题,人们似乎更愿意争论而不是倾听。但由于有人问过我几次这个问题,我将贡献我的个人经验。我并不是想说服任何人,但我希望有人能从中找到一些思考的素材。
函数作为对象
在编程中,对象的基本概念是数据和行为的捆绑。这在编写一组相关函数时提供了一个通用的数据上下文。它还提供了一个操作数据的接口,允许对象控制对该数据的访问,从而可以轻松支持派生数据并防止对数据进行无效修改。许多语言都提供了用于定义类的显式语法,这些语法充当对象的定义。但是,如果您使用的语言具有一流的函数和闭包,则可以使用这些构造来使用函数作为对象模式(最初由 Eugene Wallingford 描述)创建对象。
JavaScript Promise
在 JavaScript 中,promise 是表示异步操作的待定结果的对象。您可以使用它们在异步操作完成后通过提供回调来安排进一步的活动。
Lambda
随着人们对动态语言的兴趣日益浓厚,越来越多的人开始接触一种称为 Lambda 的编程概念(也称为闭包、匿名函数或块)。具有 C/C++/Java/C# 语言背景的人没有 lambda,因此不确定它们是什么。这里有一个简要的解释,那些用具有 lambda 的语言做过大量编程的人不会觉得这很有趣。
学习对象的语言
如果我想教人们面向对象,我应该使用哪种语言?
列表和哈希
现在,在许多编程环境中,通常将数据结构表示为列表和哈希映射的组合。现在,大多数主要语言都提供了这些数据结构的标准版本,以及丰富的操作范围,特别是 集合管道,用于操作它们。这些数据结构非常灵活,允许我们以易于处理和操作的方式表示大多数形式的层次结构。
受保护数据
在我的类中使用 protected 访问修饰符来处理数据是好的面向对象设计吗?
C# 公共字段
当我第一次接触 C# 时,我就很喜欢属性的概念。C++/Java 的 getX 和 setX 约定对我来说总是很愚蠢,编写 obj.X = other.X
要自然得多。提供具有 get 和 set 方法的属性将常见的约定变成了语言自然支持的特性。
已发布接口
已发布接口是我使用的一个术语(首先是在 重构 中),用于指在其定义的代码库之外使用的类接口。因此,它在 Java 中的含义比 public 更多,甚至比 C# 中的非内部 public 更多。在我为 IEEE Software 撰写的专栏中,我认为 已发布和公共之间的区别实际上比公共和私有之间的区别更重要。
Smalltalk 书籍
我时不时会遇到一些想学习 Smalltalk 并试一试的人,看看它到底有什么了不起的。我以前最喜欢的 Smalltalk 入门书籍 已经绝版了,但我刚刚发现您现在可以从 这里下载它 以及许多其他与 Smalltalk 相关的资料。这些资料由 Stéphane Ducasse 提供,他是一本关于 重构模式 的优秀书籍的合著者。
语法噪音
在谈论 领域特定语言(或者实际上是任何计算机语言)时,一个常见的短语是语法噪音。人们可能会说 Ruby 比 Java 的噪音小,或者外部 DSL 比内部 DSL 的噪音小。语法噪音是指那些不是我们真正需要表达的意思的一部分,而是为了满足语言定义而存在的无关字符。噪音字符是不好的,因为它们会掩盖我们程序的含义,迫使我们去费解它在做什么。
透明编译
越来越多的 Web 开发人员正在使用 CoffeeScript 和 SCSS 等语言,这些语言可以编译成在浏览器中执行的其他文本源语言。这种源到源编译器(也称为转译器)并不新鲜,Cfront 在 C++ 的早期被广泛用于生成目标 C 代码。但对我来说,有一个区别是将 CoffeeScript 和 SCSS 视为透明编译器
统一访问原则
模块提供的所有服务都应该可以通过统一的符号来访问,而不会暴露它们是通过存储还是通过计算来实现的。
—— Bertrand Meyer
Bertrand Meyer 在他极具影响力的著作 面向对象软件构造 中提出了这一原则。
该原则的要点是,如果您有一个 person 对象,并且您询问它的年龄,那么无论年龄是对象的存储字段还是计算值,您都应该使用相同的符号。这实际上意味着 person 的客户端既不应该知道也不应该关心年龄是存储的还是计算的。
goto 奥胡斯 2011
goto(以前称为 JAOO)一直是我最喜欢的会议之一。多年来,他们在保持高标准内容的同时,还进行了高效而友好的组织工作。因此,虽然我过度参加会议通常会导致会议恐惧症,但在前往奥胡斯进行有点复杂的旅行时,我仍然感到一种愉快的期待。